{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Kanerva's Figure 1.2 (page 25)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sdm as sdmlib\n",
    "import matplotlib.pyplot as plt\n",
    "from IPython.display import clear_output\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "bits = 1000\n",
    "sample = 1000000\n",
    "\n",
    "address_space = sdmlib.AddressSpace.init_random(bits, sample)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def calculate_probabilities():\n",
    "    from math import factorial\n",
    "    comb = lambda a, b: factorial(a)/factorial(b)/factorial(a-b)\n",
    "    acc = [0]\n",
    "    for i in xrange(1001):\n",
    "        acc.append(acc[-1] + comb(1000, i))\n",
    "    x = range(0, 1001)\n",
    "    y = [acc[i]/float(2**1000) for i in xrange(1001)]\n",
    "    return x, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x109559fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x, y = calculate_probabilities()\n",
    "plt.plot(x, y);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run(radius):\n",
    "    x = range(0, 1001)\n",
    "    y = []\n",
    "    for i, dist in enumerate(x):\n",
    "        clear_output(wait=True)\n",
    "        print 'Distance: {:4d} ({:.2f}%)'.format(dist, 100.*(i+1)/len(x))\n",
    "        \n",
    "        b1 = sdmlib.Bitstring.init_random(bits)\n",
    "        b2 = sdmlib.Bitstring.init_from_bitstring(b1)\n",
    "        b2.flip_random_bits(dist)\n",
    "        assert b1.distance_to(b2) == dist\n",
    "    \n",
    "        h1 = set(address_space.scan_thread(b1, radius, 4))\n",
    "        h2 = set(address_space.scan_thread(b2, radius, 4))\n",
    "        \n",
    "        y.append(len(h1&h2))\n",
    "    return x, y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "v = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Distance: 1000 (100.00%)\n"
     ]
    }
   ],
   "source": [
    "v.append((451, run(451)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Distance: 1000 (100.00%)\n"
     ]
    }
   ],
   "source": [
    "v.append((480, run(480)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Distance: 1000 (100.00%)\n"
     ]
    }
   ],
   "source": [
    "v.append((500, run(500)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEPCAYAAABcA4N7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmczfX3wPHXnQ2zMWMYu7FlzZClRIwlVITIUiklRLTIt36RyFdFfUVKpEK0KZQUytIkZZfJ2Pc922CGGWb7/P44dzZmucy993PvzHk+Hvcx93PnLsfFPffzXs4BpZRSSimllFJKKaWUUkoppZRSSimllFJKKaWUjWYBp4HtudxnKrAPiAIaOiMopZRSruMe5MM/p0RxP7DUev1OYL0zglJKKeVawsg5UcwAemU63g2EOjogpZRStvMw+fXLA8cyHR8HKpgUi1JKqWyYnSgALNcdG6ZEoZRSKlteJr/+CaBipuMK1tuyKF20qHHm6lWnBaWUUgXEAaB6fp/E7DOKH4HHrdfvAi4iq6SyOHP1KoZh6MUwGDNmjOkxuMpF3wt9L/S9yP0CVLPHB7Wjzyi+BloBIchcxBjA2/q7j5EVT/cD+4ErwJMOjkcppdRNcnSi6GPDfYY6OAallFL5YPbQk+0SE82OwCVERESYHYLL0Pcig74XGfS9sL/rVxy5KsOIioL69c2OQyml3IbFYgE7fM6bverJdsePa6JQys6Cg4O5cOGC2WGofAoKCiImJsZhz+8+ZxQPPQQLF5odh1IFisViSVsdo9xYTn+P9jqjcJ9E4ekJyclmx6FUgaKJomBwdKJwn8lsb284cMDsKJRSqtBxm0QR1+NJ+PBDs8NQSqlCx20Sxd5m3eGnn+DaNbNDUUq5ocOHD+Ph4UFqaioA999/P/PmzTM5KvfgNoniwG3loUwZWLo07zsrpQqEsLAwfH19CQgIoEyZMvTt25fY2Fi7PPfSpUvp27evXZ7LFm3bts2SqED2fBQrVoyAgAACAgKoXbt2+u+SkpLo0aMHVapUwcPDg99//91psV7PbRJFArEwaBBMmWJ2KEopJ7FYLPz000/ExcURFRXF9u3bGT9+vNlh3bQvv/yS5OTktMnldBaLhWnTphEXF0dcXBy7du3K8vuWLVvyxRdfUKZMmRse60zukyhSY6F3bzh3Dj75xOxwlFJOFhoaSvv27dmxY0f6bRMmTKB69eoEBgZSt25dfvjhh/TfpaamMmLECEqVKkW1atX4+eefszxfREQEn332GQBjx47NcnZx/TDVnDlzqFatGoGBgVStWpWvvvrK5rgvXbrEuHHjeOedd7JdmZTTqjNvb2+ee+45mjdvjqenp82v5whukyguJ10CLy9480346CMt6aFUIZH2QXr8+HGWL1/OnXfemf676tWrs3btWmJjYxkzZgyPPfYYp09LAeqZM2fy888/s23bNjZv3syCBQuyfCu3WCzpx7l9W79y5QrPP/88y5cvJzY2lnXr1tGgQQMAjh49SlBQEMePH8/x8SNHjmTIkCGEhmbfvPPVV1+lVKlStGjRwtThpdy4TaKIvWYdl3zgAUkSw4aZG5BShYTFkv/LrTIMg65duxIYGEilSpWoVq0ar732Wvrve/ToQZkyZQDo2bMnNWrUYOPGjQB8++23vPjii5QvX56goCBGjhyZ47f3vPaSeHh4sH37dhISEggNDaVOnToAVKpUiQsXLlChQvaNOTdv3sy6desYlsPn1cSJEzl06BAnT55k4MCBdO7cmYMHD+b+ppjAbRLF8pPWUz1vb5g4EWbOhK1bzQ1KqULAMPJ/uVUWi4XFixcTGxtLZGQkq1evZvPmzem/nzt3Lg0bNiQoKIigoCCio6M5d+4cAKdOnaJixYy+aJUqVbqlGPz8/Jg/fz4zZsygXLlydOrUiT179uT5uNTUVIYMGcKUKVPw8Mj4qM2clJo2bYqfnx/e3t48/vjjNG/enKUuuGDHbRLFkcu7Mw46dYInnoCHHgLtfKdUodCyZUuGDRvGK6+8AsCRI0cYOHAg06ZNIyYmhgsXLlCvXr30D+KyZcty9OjR9Mdnvn49f39/4uPj04///fffLL9v3749v/76K//++y+1atViwIABecYbGxvLli1b6NWrF2XLlqVp06YAVKhQgT///NP2P7gLcJtEkZSalPWG//0PEhJg5EhzAlJKOd0LL7zAxo0b2bBhA1euXMFisRASEkJqaiqzZ88mOjo6/b49e/Zk6tSpnDhxggsXLjBhwoQcn7dBgwasWbOGY8eOcenSJd5+++303505c4bFixdz5coVvL298fPzs2lyuUSJEpw6dYqoqCiioqLSzxS2bt1K06ZNuXTpEr/88gtXr14lOTmZL7/8kj/++IOOHTumP8e1a9e4av0ynPm6s7lNoohLjsk6jhgSAuvWweTJoNUvlSoUQkJCeOKJJ5g4cSJ16tThpZdeolmzZpQpU4bo6GhatGiRft8BAwbQoUMHwsPDady4Md27d89x0rpdu3b06tWL+vXr06RJEzp37px+39TUVCZPnkz58uUpWbIkf/zxB9OnTwfkLCUgICDHyezSpUunX0JCQrBYLISGhuLt7U1SUhKjR4+mdOnSlCpVimnTprF48WKqV89ocV2zZk18fX05efIkHTp0wM/PL9czI0dxm6KAjIUhjYcw7YFpWX9TpgxUqwZr1+Zv1kypQkiLAhYMWhQwk22nt91447FjMlv26KPOD0gppQoBt0kUgyp8RPXg6jf+wtsbIiPh55/h6ach0/Z4pZRS+ec2iaKkZ2XOXDmT/S99fGDuXPjsMxg1yrmBKaVUAecug/oGwXvxHtqIM68epUTREjfeIyUFXnkFJk2ClSuhbVvnR6mUm9E5ioJB5yjSxNQgNaYqBy/ksGvR01OWzHbvLvMV1xXXUkopdWvcJ1EAHlfKcPry6dzvNH8+PPMMNG4M+/Y5JzCllCrA3CpRWFJ9mPvP3Nzv5OkJY8fC229Dx47ggnVTlFLKnbhVojC8r/BN9De23XnYMDmzaNVKN+QppVQ+uFWiCFi6kACfANvubLHAf/4Djz0G4eGQqU69Uqrw0Vaot86tEoUlsThxiXGMXHUT9Z3efluqzXbrpsNQSrmZgt4K9fjx43Tu3JmSJUtStmxZhg0bRkpKSvrvV61aRa1atfDz86NNmzamlO8AN0sUGLLKa/PJzXnc8Tp9+sjS2WrVZOmsUsotFPRWqM899xwhISGcOnWKbdu28fvvv/PRRx8BcO7cObp3786bb77JhQsXaNy4Mb169TIjfDdLFMCnnT+lQmD2TUJyNW6czFs8/DC8/37+iuQrpZyuILZC3bFjB7169cLHx4fQ0FA6duzIzp07AVi0aBH16tWje/fu+Pj4MHbsWKKioti7d6/Nr20vbpUoDANCfEOYvW02Ry4eubkH+/jA1KmwfDm89hq0bu2YIJVSdlWQW6F26NCBr776ioSEBE6cOMGyZcvSy4zv2LGD8PDw9Pv6+vpSvXr1LKXUncXL6a+YT14eEvKuc7uoXKLyzT/BnXfC4sWyc/vpp2X+omRJO0epVMFheSP/BRyMMbd2Bp/WCtVisXD58mW6dOlyQyvUND179uTtt99m48aNdO7cOUsrVJAP7Jx6UtvaCrVChQqEhoamf+intULNSVor1A8++CDb+YWxY8fSrl07AgMDSUlJoV+/fnTp0gWQBFWqVKks9w8MDOTy5cu5xuoIbpUoLBZoX609jco2Yt/5fXSs3jHvB2WnTRs4cgQaNJD6UIcPQ+VbSDpKFQK3+iFvD2mtUNu0acOaNWvo3LkzmzdvTu8WN3fuXCZPnszhw4cBuHz5ssNaof7vf/+jf//+NG/enEmTJlGzZs1cH5dXK1TDMOjQoQMPP/wwGzZsIC4ujqeeeopXXnmFiRMn4u/vf8PE/aVLlwgIsHHlpx253dCTt6c3w5oOI/JIZP6erFIl2LRJdnBHRMC2bEqYK6VcRkFrhXru3Dm2bNnC0KFD8fb2Jjg4mH79+qV3wqtbty5RUVHpz3flyhUOHDhA3bp183xte3OrRJEmIiyC9cfX5/+JqlWDjRth0CBo2BCmTNEy5Uq5sILUCjUkJISyZcsyffp0UlJSuHjxIp9//nn6vETXrl2Jjo5m0aJFXL16lTfeeIMGDRpw22233erbV+AZYBjFixuGYRhGamqqwViMlQdWGnbz+++GIScthhEZab/nVcqFAWaHkKuwsDBj1apVWW4bPHiw0a1bN8MwDGPUqFFGcHCwERISYgwfPtyIiIgwPvvsM8MwDCM5Odl48cUXjZIlSxpVq1Y1pk2bZnh4eBgpKSmGYRhZ7msYhvHss88aJUqUMGrUqGF88skn6fc9deqU0apVK6N48eJGiRIljNatWxu7du0yDMMwjhw5Yvj7+xvHjh3L889y6NChLK9vGIaxfv16o0WLFkaJEiWMkJAQo1evXsaZM2fSf79y5UqjVq1aRrFixYzWrVsbR44cyfa5c/p7lM/O/HN0mfGOwBTAE/gUmHjd70OAL4AyyHzJ/4A52TyPAQa+vnDlitwwaMkgLl67yPwe8+0X7bZtcmYB0lq1eXP7PbdSLkjLjBcM7lxm3BP4EEkWdYA+QO3r7jMU+BtoAEQAk8hlgj0pKeP6mIgxrDy4kuTUZPtF3KCBDD29+y48+KD8zDRuqZRShZEjE0VTYD9wGEgCvgG6XHefU0Cg9XogcB7I8ZM/KQmSrb8tF1CO8gHl2XJyi12DxmKBESNkv8Vbb4GfH5iwblkppVyFIxNFeeBYpuPj1tsy+wSoC5wEooDn83pS66ZFAFpVbsUfR//Ib5zZa9IE/v0XPvhAKtAeOKD9LZRShZIj91HYMvA5EtiGDDtVA1YA4UDcjXcdC8Ann0D37hFERETQsGxDIg9H2iXYbBUpAkOHwqFDUL263HbhApTIphWrUkqZLDIyksjISLs/781OcgQDFYB/bLjvXcine9quuFeBVLJOaC8F3gT+tB6vAl4Brq/6Z6TlnZ07obZ1pmPTiU30/7E//wy2JZx8+vpr6N8fEhLgm2/ApOJcStmTTmYXDK4wmf07Mn8QDGxBVi9NtuFxm4EaQBjgA/QCfrzuPruBdtbroUBNINta4P36QfnykKkCLw3LNmT7me34veXH5UQHb2vv0wcuXoSZM6F3b3jySdndrZRSBZwtiaI4EAs8BMxFJqnb5foIkYysavoF2AnMB3YBg6wXgLeAxsj8xErgZSAmuyebPVtKMmVOFF4eXnxw3wfEJ8Wz7V8n7Kz28ZH6UGmlysPC4NVXtRKtUqpAs+WUZDvQHvgceA3YiAw91XdgXNczDMPgjjtkjqJRoyy/4Pbpt/NW27d4sOaDTgwJ+O476NlTrq9bJxPgNuzYVMpV6NBTweAKQ0/jkLOCA0iSqAaYsvzH0zPrGQXIG3Fn+Ts5EHPA+QE9/DBs3SrXmzWTsbGEBOfHoZTKk7ZCvXW2JIrvkLOHwdbjA0B3h0WUi+wSBUApv1IM/3U43+/63vlBNWwoQ0/jx8Pp0+DrK2XMswtUKXVT3L0V6pw5c/D09CQgICD9smbNmvTfx8TE0K1bN/z9/QkLC+Prr7/O8nh3aoVaE1mNlNZWqj4yBOV0Xl7w0kvSQiKzt9tKAa8RK0aYEJXVqFGweTPMnQtdu0KXLvDnn3k/TimVo4LQCrV58+bExcWlX1q2bJn+u2effZaiRYty5swZvvzySwYPHpze4c7dWqF+gux3SLQeb0fKcTjdX3/JVMD1icJisfBN9284euko15KvmRGaaNQI+vaF8+chNhZatJBltHv2mBeTUgWEu7ZCzWkO6MqVKyxatIj//ve/+Pr60rx5c7p06ZI+HOZurVB9gQ2Zjg2kJIfTpb3f2XUtrFe6HsmpySzbv8y5QWUnOBjWrJFaUd9+C7VqwZIlujpKqVtguHErVIvFwt9//02pUqWoWbMm48ePJ8U6LL137168vLyonraZFwgPD09PhK7UCtWWRHEWqJ7puAdSo8k02f2d1i1dl/c7vs+YyDHODygnI0ZIcli2DAYOlGq0+/ebHZVSN8diyf/lFhnWVqiBgYFUqlSJatWq3dAKtUyZMoD0n6hRowYbN24EyNIKNSgoiJEjR+b47T6vlV9prVATEhIIDQ2lTp06QEYr1AoVKmT7uJYtW7Jjxw7Onj3LwoUL+frrr3n33XcB6cYXGBiY5f4BAQHExcXl+HuzWqHakiiGAh8DtZCaTC+SMbFtCo8coh7adCjn48+z+9xu5waUl44dZfipWDG4/XbpqJdLM3alXEpGp5Zbv9yitFaosbGxREZGsnr1ajZvzijcMHfuXBo2bEhQUBBBQUFER0c7rBXqjBkzKFeuHJ06dWKPjcPJVapUobK1zXK9evV4/fXXWbBgAUCOrU7TkkNAQIBbtUI9ALRFekfUBJojFWFNk9MXFA+LB11rdTVn9VNeAgNh1SopLrh9O1SsCNOnZ62drpTKkbu1Qs1JWny33XYbycnJ7M80yhAVFZXe6tRdWqG+lOkyHNlNPSDTsWlyO5PtVqsbX0V/Zd8+FfZUrhwcPiyrpD78UDbpzZ+f0ZFJKZUjd2qFCrBs2bL0OZPdu3czfvx4unbtCsiZykMPPcTrr79OfHw8a9euZcmSJemT6t26dXOZVqi5JYoAwN96Cch0STs2TU5DTwCtq7TGw+LBX8f+cl5ANysgQPZdbN0qO7t794a2bWH1au3ZrVQuQkJCeOKJJ5g4cSJ16tThpZdeolmzZpQpU4bo6GhatGiRft8BAwbQoUMHwsPDady4Md27d89x0rpdu3b06tWL+vXr06RJEzp37px+39TUVCZPnkz58uUpWbIkf/zxB9OnTwfkLCUgICDHyezVq1cTHh6Ov78/DzzwAN27d2fkyJHpv//oo49ISEigdOnSPPbYY8yYMYPa1qqnISEhLFy4kFGjRhEcHMzmzZv55ptv7PI+3ixHt0K1F8MwjPQziXLl4MSJnO88dOlQLide5sW7XiS8THjOd3QVSUkwaxY88wwMGyaT3j16aDkQ5XBawqNgcIUSHp8DmRswBAGz8vvC+ZHXl+721drzedTnNJrZKPc7ugpvbxg0SIakdu2SM4yhQ7WznlLKJdiSKMKBi5mOLwB3OCYc2yQm5v77DtU6AJBiuFkZjcqVYcUKSRC7d8tw1OLF2rdbKWUqWxKFBelFkSYYMHVMJK9EUcSrCGv6rSGwSCBXk686Jyh7qlsXfvtNel/07y99u8eP1/kLpZQpbEkUk4B1wH+B8dbr7zoyqLzYsqL0nsr3UKdUHdYdW+f4gBylSxc5u/jmGxg9GqpVg6lTIdlFV3QppQqkvBKFB7KP4iHgDPAv0A1pYGSaa9ds+3Jd2q80bea2cXxAjlSmjNSLOn0ann0Wnn9eypm/8w7EZdNaXCml7MyW2fBtQANHB5KHLKueABYtgm7dcn/Qv5f/peykshx47gBVg6o6NkJnSUqCBx6QuYzQUFkZtXWrXFfqJumqp4LBFVY9rUTqO7nUUlprJd5clfEvQ78G/ag2tRr7YwpIjSVvb1i+HI4elTkMDw+Zx1i6FM6eNTs65WaCgoLSi+PpxX0vQUFBDv13YkuieAb4FikzHme92KdzSD5ct8M+Rw/XeRiAjSc2OjAaJ/PwkBIgDz4oRQbr15ed3nfeCRs3apVaZbOYmBgMw9CLm19iYmIc+u/Epc4ScpE+9OTvL4VYjx6VltV5uZZ8jTof1SHAJ4ANT2+giFcRx0drlunT4eWX5frdd8sbdF31SaVU4eGMoafa1p935HBxuiZNoH17+SJt6xlFEa8i/PbEb3h6eLJg5wLHBmi2wYPh0iUZkvr1VyheXBop5bWeWCmlcpFbpvkEKQIYiTQrul5rRwSUA0NOseRg717o1An27bP9Cb745wv6ft+XfcP2UT24et4PcHcJCfDWW/Dee7Jhb+JEeOopCAkxOzKllJPY64zCrYae0ly6JEP0N9NjPT4pHr+3/Jh2/zSGNBnigBBdVGKiTHZ/8YUcz5snWbZEidwfp5Rye85c9fQsUt8pTRBg6idtYKCsEr2Zyty+3r583f1rZm6ZyfHYQtQ0yMdHkkNysqyWmj8fwsJgwAB5A3XiWymVB1sSxUCkvlOaC9bbTGOxyLYBa5l3mz1Y80GiTkdRf3p9xwTmyjw9oUMH6d29fTucOycrAzw8ZAwvxc3qYimlnMaWROFx3f08AW/HhGO7gACYM0c+92zl6+3LbSVv48LVC8RdK8S7mitWlB2L994rx7fdBl5e8O235sallHJJtiSKX4BvkHao7azXlzsyKFv4+sJ//yt9f27G2ifXAvDKylccEJUbsVhkZZRhSD2poUOlVEjv3trPWymVhS2J4hXgN2AwsvluJfCyI4OyhZ+f/LzZ+nil/EoR83IMP+z+gc0nN+f9gMKgbl344AOpHXXwoJxx+PjAa69pxVqllHuuegJZuPPzz/LF+FY+y2ZsnsHMLTOJ7BdJYBHdlJYuMVEmudu2hb//ltueeQbefVfmNJRSbsOZq55ckq+v/LzVRTv9G/YnMSXRfbrgOYuPDwQFSaHB1FT46CNpohQeDg8/DOvcuGy7UuqWuG2iOHo043r//jf/eG9Pb2Z2nsn+mP0cvHDQfoEVJBaL7Pb+7TeYMQOioqQ0SFCQLLVVShUKeSUKT+B/zgjkZm3YkHF969Zbe467K94NQLWp1ewQUQF3771yZvHdd1JLpWdPWSn17ru6F0OpAi6vRJECtMAF5zJ8fDKu166d8/1sdSL2RP6fpKDz8IAePWS11K5dMHYsfPyx3P7CC5owlCqgbBl62gYsBvoC3a2XhxwZlC2iozOu56dnz9EXjvJkgyf5aNNH+Q+qMClfXlZFRUZK173335chqc8/hz/+MDs6pZQd2XKmMMf68/qvi0/aN5Rc3bDqKTlZevgADBkC06bd+pPvPrebxjMbM7zZcMa1HpePMAuxhASZt3jI+h0iLEyq2LZqlfX0TynlNO5SFLAjMAWZ6/gUmJjNfSKAychu73PW4+vdkChA5loffRSKFYNPPslfoKsPrabt3LYcfO4gVYKq5O/JCrPkZCnENWeOZPBy5WT7fIMGMkSllHIaZyyPTdu6/EE2l6k2PLcn8CGSLOoAfcjocZGmBDAN6AzUQ1qu3hSLxT7tFu6ueDdFPIvQ/8f+XE68nP8nLKy8vCRzp/XGKF4cGjWSn/37wwmdC1LK3eSWKNK6Um/JdNmc6XpemgL7gcNAElL6o8t193kEWAik1Yw4Z0vQmRUrZp9EUdSrKJf+7xKpRio/7/05/0+opMzvzp1ScPCee2DWLKhQQYoTnrvpv2qllElySxRp5fbmWC/fAZ9br39uw3OXB45lOj5uvS2zGkAwUiJkMzJhbrOtW6Xjnb0auBXxKkKHah1Ye3StfZ5QCQ8PWLoUrl6Fn36SHd+lSkG7drIhJq4QF2hUyg3YMmh8N3J2sdt63ACwZYmQLWslvZG2qvcDHYDRSPKwScOGUKSIfTt99rm9D59s/YRvd3xLQlKC/Z5YyV/WAw/AmTOwaZP8BdaqJWce3buDgxvEK6VujZcN95mCzDMsth5vA1rZ8LgTQMVMxxXJGGJKcwwZbkqwXtYA4cANTU7Hjh2bfj0iIoKIiAhAFtRcvWpDNDYKKxFG/4b96bWgF2NajWFsxNg8H6NuQePGchk5Ejp2lLLnixZBs2bw9dcyCe5tejV7pdxKZGQkkZGRprz2RuvPvzPdFmXD47yAA0AY4IMkmOsns2sh1Wg9AV9gOzLxfT0jJ6tXGwYYxty5Od7llsz+e7Zxx8d3GIcvHLbvE6vsXb5sGO++K3+ZYBi3324Y69YZxrVrZkemlNvCtpGdPNky9HQUaG697gOMAHbZ8LhkYCjSz2InMN/6uEHWC8hw1nLgH2AD8AkZk+g2SVuiv2jRzTwqb11rdWXrqa2EvR/G2Stn7fvk6kZ+fjBihIwjXr4szZSaNZPhqnHjdNe3UiayZX1tKeB9pGmRBfgVeA4478C4rmdNjjdaulSGvW+7Dfbsse+LvrD8Bd7f8D4WLKS8npK2Jlk5y+bN0rZ1/HgoUQL69IGBA2VOQymVJ3fZcGcvOSaK3btlmX5KirRR8PS07wv/c/ofwmeEs7LvStpWbWvfJ1e2OXAAli2TelIpKVC5MrzxBjzyiM5jKJULZyaK0sAAZK4hbfLbAJ7K74vfhBwTRZry5WH9emnOZm/PLXsOLw8v3r33XTw97JyJlO0uXJCltIMGZZQ5f+QR+PRT2VCjlMrCmY2LFgOBwArg50wXl1K1KlSqBNu22f+5G5drzOT1k5mwdoL9n1zZLihI/pKXLYNTp6TF4ZEj0nnvtdfg9GmzI1SqQLIlURRDynl8CyywXhY6MqhbUbWq/DxyxP7P/Vj9x5j+wHTeW/8ee87ZeSJE3ZoyZeD++2HtWtixQ74hlCkjPXI3bLDv5hqlCjlbEsVPwAOODiS/KlWSn44YsvawePBM42foF96Pe+fdS3xSvP1fRN26WrWk8OD589CmDdx3H9SrJ/Wm7LnJRqlCKrdEcRmIA55HynlctR7HAbGOD+3mBAXJT0fObb7c/GWOxR7D7y0/x72IujUWCwQHw/DhkjDGjIH586FKFakttWOH2REq5bZySxT+QID14gEUzXTscusT/ayf3Y5cwRrqH8oPvX4AoN8P/chrgl2ZJK3+fEyM7PIOC5MzjLAwWLBACxIqdZNsGXpaZeNtpvKyrsdy9NB0l1pdWNhzIZ9Hfc7mk5sd+2Iq/yIipF3rtWsy4f3ww1KQ8MkntbaUUjbKLVEUA0oiG+6CM13CuLEKrOnSEsW1a45/rYdqP8T41uOZ9fcsx7+Ysg8fH3j6admHMX++nFWULy91pqZPh0OHzI5QKZeVW6IYhJT+rknWnhQ/Ig2JXEraRrthwyBT/UCHeaLBE3y781s+3PihDkG5Ew8P6NlTJr9Pn5YyIa++Kh34JkyA48ch1uWm4JQylS0j+s9hW0c7R8pzw11srDRRy3iAgyMC1h9fz9M/Pk2vur0Y3Wq0419QOc6ff0p5kJ07ITwJ69k9AAAgAElEQVQcZs+WMuhKuTEt4ZGNypWlD448wMERWZ2IPUH4jHCW9FlC0/JNdee2O0tJgYMHYdUqePllOdu4/35p4ervb3Z0St00Z+7MdhuZJ7IvXnTOa5YPLM+Iu0dw96y7mb1ttnNeVDmGpyfUqAHPPAORkbKs9ttvISBA5je2bNGNfKpQyi3TNAf+RJbFmr1ryaYziqCgjARRuTIcPuzYoNIYhsETPzzBvH/mseDhBXSv0905L6wc7+pV+OorSRxbtki9qfvvhxdfhLp1zY5OqVw5Y+hpC9AIaVhk9mCtTYmiaNGsq56cOcd86MIhHvr2IUr7lWb5o8u1JHlBZBgwahS8/bYcT5wok+Dt25sbl1I5cEai2IA0FOoCfHPdfQ1kkttZbEoU1atLReqMBzkwomwkpiTSaGYjxrYay0O1H9JkUVBduwa7dsnqqX37pE9Gjx7w4IMZ67SVcgHOmKPohGysSyDr8ti0i8vZtCnrptu0sh7O4uPpw9SOU+nxXQ/CZ4Q798WV8xQpImcSu3fDiRNQtix07y7zG999B2fPQmqq2VEqZTe2ZJoGSL9rM9l0RpEm8xd5M7Y4rD++nmafNeP1lq/zRus3nB+Acr6LF6VHxmefwcqVUjJk6VLHNEhRykbOXPV0HvgeOGu9LAQq5PeFC7K7KtxFeGg449aM41TcKbPDUc5QogT07g0rVsgu7/BwKWl8zz2yJ+PKFbMjVOqW2ZIoZiO7sctZL0ust7kFszZNb3tmG91qdaPce+XYeXanOUEoc4SFwRdfyIRZ27Ywbpzsw2jTRoaqlHIztpySRAHXD7hnd5sj3fLQ05Ur4OvrgIhskDYEBZD4WiLentrfuVBKTJSdoBMnSr/eu+6SRu9PPinzHUo5iLOHnvoCnkjP7McAt6nTnNbQ6H//g9dfd+5r31XhLt69910Aan5Yk8uJl50bgHINPj6yJG/aNHj3XdnkM2uWrOdu1cox/XuVsiNbMk0Y8AFwl/X4L2AYcNRBMWXnls8o5MHSryI+3vlDUYZh8Pbat/nz2J9UDKzIjE4znBuAck0pKTB3Ljz1lByPGQNNm8pmPqXsRGs95aJ8eTh5MuM4ORmKFYOkJPPmLCb9NYkRK0bwRsQbjG45WvdYKHHihBQinDdPVkkFB8Po0bInI3OVS6VugSaKPKSmZpQeP30aypSRJGFWokhJTeH9De/z0q8vsbDnQrrV6qbJQmV14ABMnQpRURAdLWcbAwdC1apSHl2pm6SJwgZpn8PR0bKsXZ7IjlHdgtWHVvP4948zuPFgRrUcZW4wynXt2wfPPQdr18pE2+zZssnPx8fsyJQb0eqxNkhLFHFx8tMVqiu0qdKGqfdN5bXfXmP5/uVmh6NcVY0asGwZXLok/b9btYJateCTT+QUWSknsiXTFAW6I5PaaR+1BjDOQTFl55bOKJYskaHelSuhXTtZZJKQ4IDoboHlDXnrr712DR9P/Zao8mAY8P33MHQonDoFDzwg5dAfeODG1RtKWTnzjGIx8CCQBFy2Xtxim2nnztCpU8amWFc4o0hz6PlDNCjTgND/hXL6sn5DVHmwWOChh2TyOzZWNvX16iVzF5MmyZI+pRzElkwTDdRzdCB5uKUzCpCqCvPny/USJaSdgKv45/Q/tJjVgrhEGRu7/Opl/Hz8TI5KuY0zZ+Ctt+D332UvxsiR8Mgj2idDpXPmGcVfQP38vpBZMne68/SU/09//WVePJnVD63PzmczyntsPLHRxGiU2yldGqZMgd9+k+ZKK1bIqo3u3eGff8yOThUgtmSaXUB14BCQ1hbIwLnJ45bPKOrVgx075Hq5cjJHceGC+aufMruSeIXRv41m8vrJbBm4hTvK3mF2SModpaRIqZAlS+C11+QU+rXXpG+Gv79rjb0qp3DmGcV9QA3gXqRHRWdkzsItxMRkXK9Vy7w4cuPn40ebKm0AaDGrBefjz5sckXJLnp5QpYosq42JgcWLYeZMaczStSts3252hMpN2ZIoDgMlkOTQGShuvc0tPPignIn/+KNswnOlM4nMOt3WidMjTnNH2TsYGznW7HCUu/PygoYNpZvXtm2y+7t+fbnt++9d9z+Cckm2JIrngS+AUkCo9boz26Dmy4wZsGCBnIUnJZkdTe5K+5VmYc+FzNo2i8cWPcbFqxfzfpBSubFYpDfGwYNyltGiBQwYACEhUl8qOdnsCJUbsGXsajtSEDBtSawfsB643VFBZeOW5yjSrF8Pzz8Pe/bIHiZX/kK15eQWGn/SGIDtg7dTr7TZi85UgRIfL6WUJ02CgACoUwfGj5feGbono0Bx9s7s1Byu56UjsBvYB7ySy/2aAMnAQzfx3DfFy8t9vjw1KteI/cP2069BPzp91YkdZ3aYHZIqSHx9pe5+aqqcbl+8CPfeK2vJly41OzrlgmztcLcBGAu8gZxNzLLhcZ7Ah0iyqAP0AWrncL+JwHIcWHvK29vc6rE3q1pwNWY9OIve9XpTb3o9DsQcMDskVdBYLNC+vSwLPHUKmjSBIUOkfMjAgVoqRKWzJVG8BzwJXECaGPUDJtvwuKbAfmTiOwn4BuiSzf2GAQuQftwO4+3tfptXLRYLE9pN4OmGT9Phiw6sObLG7JBUQeTpKeWVR4yQpDFkiOwAr1pVzjTOuU2fMuUguSWKQOvPYGQPxRfAl8AR6215KQ8cy3R83Hrb9ffpAky3Hjvs+37RolLFOTbWUa/gOD3q9ODAhQO0mtOKqRummh2OKsj8/ODFF+Hnn+Hrr+HwYShbFlq2hPO6bLuwyi1RfG39uRXYAmy2XrZYL3mx5UN/CvB/1vtacODQU9Wqjnpmx+tQvQMpr6dQI7gGzy9/XmtDKed48EHYuzej13elSvCf/0hL1ytuUe5N2YkjlzjchcxrdLQev4pMhE/MdJ+DmWIIAeKBAcCP1z2XMWbMmPSDiIgIIiIibjqgkiUzNuC5y1zF9Z79+Vl+2vcTrzR/hUGNBuHp4Wl2SKqwOHRIksbHH8vxm2/CSy9BkSLmxqXSRUZGEhkZmX78xhtvgJMaF60C2tpw2/W8gD3W+50ENiIT2rtyuP9sYAmwKJvf5Xt5LMgG1bTaT2lPt2iRlCAPDMz5ca7EMAxGrR7F22vfZmXflbStmtdfg1J2tn8/HD8O3brJmO5LL8nejMBAXV7rYpyxPLYYUBLZaBec6RLGjXMN2UkGhgK/ADuB+UiSGGS9ON28ebIqsGxZmas4f152bc+bZ0Y0t8ZisfBW27cILBJIu3ntWHdsndkhqcKmenWIiJCiad99J0NRJUpIyfOzDl2TokySW6Z5AdmVXQ45I0gTB8xElr46i13OKECKAvr6yvXAQEkYs2dDv352eXqn2fbvNpbtW8bI1SNZ2Xcld1e8m2LexcwOSxVGKSlSufaNN2Quo21buOceePVVbd1qMmf2zB4GfJDfF8onuyUKuPHs+KuvoE8fuz29U83cMpNBPw2iQZkGbB24Ne0fhlLmOHkS3nsPJk+GO+6Qcd3x42UJrnI6Z+7MNoCgTMdBwJD8vrArcecFHAMbDeTr7l8TkxDDpHWTzA5HFXblysn4bkKC9PqeMEGGpX780X1XkCibMk0UEH7dbduABvYPJ0cOPaOYPFmqMIeF2e0lnG7x7sV0nd+V9tXas7DnQvx9/M0OSSnYtw/GjYO1ayVR3H+/bOirp/XLnMGZZxQe193PE/DO7wu7kjVrpIy/O+tSqwsNyzTk1wO/cu+8ezl66ajZISkl5UDmzYNdu6ShUkICNGsmLVv374fLl82OUNnAlkTxC1J+oy3Qznp9uSODcrTp07MeHzxoThz29lf/v0ganURYiTAqT6nMnG1zzA5JKVG0KNx+u6wc2bsXypeXJBIQIMNSyqXZckriCQwkY9/ECuBTIMVRQWXDrkNPkDH85O+f8aWmoAyhRv0bRYOPZWRwUvtJDG48WFdEKdczfz788oskj9KlYehQGD3a7KgKFGeuegLwBSohJcPN4LBE8cMPMj8BUnX5yhUZQp07164vZ4rJ6yYz/NfhBBcLZtugbVQsXtHskJS60Zo10nVvyhSpZvv551KkUOWbM+coHgT+JmO4qSE3lthwO6tWyc9SpTJui4yUfi7utAEvN882fZaP7v+ImIQYKk2pRPWp1c0OSakbtWwpK0pOn5Y9GWXLQqNGcsZx8mTej1cOZ0um2Qq0AX5DkgRANODMZQt2P6O4ehU++gg6doS6dWVTacmSGRtLC8owFMB3O76j54KeAOx6dhe1QmqZHJFSudi7V84qZsyQ4mwTJ8LLL5sdlVty5tDTBuBO5KwiLVH8A9TP74vfBLsnisxOn5ZkkZwsbVLlBeX6lSuyNNzdXUm8wjM/P8MX/3xB9OBo6paua3ZISuUuMVHqSS1dKmvXmzaV033d7W0zZw497QAeRYr81UB2af+V3xd2JaGhUgDz2rWst3fuLIszCgI/Hz8mtZcNefWm1+OvYwXqr1AVRD4+0hfj2DHZ7b19u/xHff/9gnXK7wZsSRTDgLrANaRHRSxSB6pAKVpUhqPSpKTIGXBBUtqvNEsfWUqtkFo0n9Wc7t92Jz7Jzdr+qcKnQgU5s4iKkmGoWbNksnvIEE0YTnKzpySegD9wyQGx5MahQ08gX1QSEzOO4+MhOFiSR0H8t3gg5gADfxrI7nO72TJwC2X8dZWJchOGAd98A489Bg0bwuOPw7BhWuI8G84cevoaaYvqB2xHSoYXuJmlzEki7fjq1YxaZklJzo/JkaoFV2P5o8upUqIKZSeVZc+5PTg6GStlFxaLVPFMSJBk8fzzUgp60iRZ467szpZEUQcZbuoKLEP6UfR1YEwu4fvv5WfRojLZXRDnz7w9vfm176+E+oVSa1otFuxcYHZIStnOxwdeeEEmF2fPlnmM+vWl854mDLuyJVF4IbWduiId6JKwrR+2W2nVKmudsieflJ8eHtKzoqDy9fbl70F/M6n9JHou6MlHmz7SMwvlXnx8oEcP6bo3ciRMnQqVK8tGPmUXtoxdPQe8giyJfQDZoT0PuMeBcV3P4XMUiYmyPNbPL+vtAQGweTPUrFkw5yrSpBqpTFk/hZd+fQmA+T3m07NuT5OjUuoWnDkjy2gnTZIGSn37QqdOZkdlCmfNUXgAp5HWp/cBqcARoHV+X9jV+PhkdL7LzGKRBAIZPwsiD4sHw5sNZ25XqV3Sa0Ev7pl9DwdiDpgcmVI3qXRp6eMdFSXf8Dp3hv79Yc8esyNzW7Zkmi1AI0cHkgeHn1GkyW7hxO+/y9DU5cs3nnEURHvP7yUmIYZmnzUDwBhTgE+lVMF35Ig0UJoxQzbtzZkDtWubHZVTOHPV0wpgBFARCM50KTR6WkdgMu+zKMhuK3kbd1W4K/24wYwGOtGt3FflytJbYPt2mexu3Fj2YJw7Z3ZkbsOWTHOY7Cevndnqx2lnFBcvQlBQ9r+rXBkOH3ZKGC7hQsIFDAwG/zyYb3d8y+DGg3mq4VM0LtfY7NCUunUxMTBwICxcKPMYL7wgq1YKIGeXGTeb0xIFyPBT27ZSYdbLK+vcREGe0M5JYkoi3b/tzk97fwLg0v9dIrBIoMlRKZVPv/8O//kPbNoEK1ZAu3ZmR2R3zhx68gNGA59Yj2sABXoJQUpKRrHKglJyPD98PH1Y0mcJmwZsokvNLtT6sBYrDqwg1dC16sqNtWoFf/0lZxSdOkGbNvDbb2ZH5ZJsSRSzgUTgbuvxSeBNh0XkAjw8oEQJuZ72M01B3lORl8blGvPZg58x4u4RtP+iPZ7jPElOLcBLwVTB5+UlvTAuXYKnnpKaUh06wIULZkfmUmxJFNWAiUiyALjiuHBcR3i4bPAsXjzr7dcfFzYlfUsyvNlw9g/bj7+PP32/78vuc2Y1PlTKTooUkXIgP/4IW7fKEttZs3SHt5UtieIakLnhcjXrbQVakSKyydPf3+xIXFO14GrsHLITP28/Ws1pxZf/fGl2SErlX8uWsmHvrbfg44+hRQvYts3sqExnyyRHe2AUUvNpBdAc6Id0vHMWp05mZ7Z/P9SokfW2t9+WM9SaNU0JyeVsOrGJpp825dHbH2VO1zl4eXiZHZJS+ZeaKmcVo0ZBr16yca9dO7eqUuvsVU8hQNrC+g3A2fy+8E0yLVGAbPAMD8/672PIEJg2zbSQXM7y/csZsGQAcdfiWP3Eau4oe4fZISllH+fPwyuvwGefwb33wqJFbjPU4MxEsQpoa8NtjmRqokhz8SJUrCg7tB9/XNr6qgypRirf7/qeHt/1AOCfZ/7h9tDbTY5KKTtZvx6aN4cqVeDrr6FJE7MjypMzlscWA0oCpci6IzsMqf1U6JQoIUUCAebOlRLk775rbkyuxMPiQfc63Tkz4gz+Pv7Un1GfSX9NIimlgDXzUIXTXXdJY5oXX5RSIGPHwokThWJzVW6Z5gXgeaAcsiQ2TRwwE/jQgXFdzyXOKCD74UkXCc3lPPvzs3y0+SMAjrxwhErFK5kckVJ2EhUF990Hp05J46QpU8yOKFvOHHp6Dpia3xfKJ00UbsgwDKZtmsawZcPw8vBiRd8VRIRFmB2WUvZhGDLR/fbbEBEh7VlDQ82OKgtnT2bfjQw5ZV7OMje/L34TNFG4uffXv88Lv7xARFgEb7V5i2YVm5kdklL28fff0rP7zz+ly94LL7jMyihnlvD4Avgf0AJokulSKL39NuzeDRMnZtym8xR5G9p0KBPaTsAwDO6edTd3fnonl65eMjsspfKvYUNYu1aGn4YPh9atIS7O7KjsypZMswvZQ2Hm92aXOaPILDkZvL3luguG57IW7lyYvjIqenA0dUvXNTkipexk925pmpSQAP/3f7Kc1sSzC2eeUUQDZfP7QgWRV6aBOItFOi4uXmxePO6ie53uJIxK4J1273DvvHvp8k0Xjlw8or26lfurVUs+BO67TxrZREQUiAJxtmSaSKABsJGM0h0G8KCNr9ERmAJ4Ap8idaMyexR42RpLHDAY6c+dmUueUcCNXxaKFYP4eHNicUfL9y/nvi/vSz+OezUOfx/32MykVK7i42HAAIiMhKVLZdeukzlzMjsih9sjbXisJ7AHaAecADYBfZDhrDTNgJ3AJSSpjCVjF3gal00UcXEQmKk1Q7FicPZs4WiZai/xSfE8+PWDrDq0isblGrP2ybUU8SpidlhK5d/FizB0qGzQmzcPHnnEqS/vzKGnyBwutmgK7Ee65CUB3wBdrrvPOiRJgJQHqWDjc7uEgAAYNy7juFIladGrbOfr7cvKx1eSMCoBLw8vir5ZlNGrRxN3rWBNCKpCqEQJ+OILWLIEnn4aund3yxLmuSWKy8hQUHYXWwfdygPHMh0fJ/dd3f2BpTY+t8son+lPVLUqbN5sXizurKhXURb2XMj8HvMZ/8d4anxQg1l/z+JqciFpVq4Krvvvh+hoGY6qVMntKtLmVubTHgPFNzNe1Bp4CqlOe4OxY8emX4+IiCAiIiI/cdlV2h6bffukYdaPP0otKHXzygWUo2fdnjxc52GKTyhO/x/70//H/vz2xG+6WU+5t6pVZaL7qadkSe2UKbKr244iIyOJjIy063OC43tm34XMOXS0Hr8KpHLjhHZ9YJH1fvuzeR6XnaMA2LIFGjeWYoHr10vDo9WrzY7K/SWlJLHj7A5e+vUl/jjyB3VL12XV46sILhZsdmhK5c+iRdCnD9xzDyxblrHO3s6cvTP7Vnkhk9ltkXpRG7lxMrsSsBp4DFifw/O4dKI4ehQqV5Ze2//8I18WYmLkuHhxh/0bKFR2nNlB689bczb+LMPvGs6kDpPMDkmp/NmwQQoNApw+LV317MyZk9n5kQwMBX5BVjbNR5LEIOsF4HUgCJgO/I0kE7cSGgq1a0uv7WDrl91x46BUKWlwpPKvbum6HHjuAKF+oby3/j0qvFeBIT8P4YfdP+j+C+We7rwTDh6U66GhMH++ufHkwjUKkuTNpc8oMrtyRXqadO0KP/wgt505I0lD2UdKagqT10/mPyv+A8C2QdsIL+P8NepK2YVhwKBB8OmnsHOnbNqzE3cZerIXt0kUIH/nM2dmvc2NwncrE9ZOYNK6SfSt35fe9XrTpFyTtP8cSrkPw4CpU2H8ePnwsNNQhCYKF3btmjQ1yqx0aSkk2K+fKSEVaBuOb2D0b6NZcXAFQxoP4dH6j3J3xbvNDkupm7d6NbRtK82R3nsv30+nicLF5fSlNjXVZSoQFzgfbvyQYcuGUaJoCT7u9DHdanXD21NXEig3s2ABPPwwPPssTJ6cr9Uw7jKZrci6a3/fPvPiKOiGNh3KhVcuMLbVWEauGonPeB9eXvEyiSmJZoemlO169JAmSDNnwn/+Y3Y0gJ5ROMyff0qV4bVrZfjx1CkYMUJWww0bZnZ0Bd+FhAt8tf0rvor+ir+O/cWH933IEw2e0IKDyn3ExEDJktClC3z//S0NRejQkxvo0kV2aaeFvnChzFF4eUH9+rBqVdZS5cr+Yq/F8smWT/jlwC+sP76eWV1m0bZKW4KKBZkdmlJ527wZmjSBsWNhzJibfrgmCjewb59swOveXY6vn+QePBhatHB6QclCa82RNbSa0wqAUfeMYkyrMTqHoVxfdDTcfjs8+SR89tlNnVloonBT2f0dX7qUtVS5cpwNxzew7d9tzImaw9ZTW5nQdgJPNXyK4kWLmx2aUjn75Rfo2FHqA40cafPDNFG4qcmTpa1uZn37Qpky8M475sRUGCWnJjPk5yEs27+MM1fO8H7H9xlwxwA8PTzNDk2p7K1cKa1Vx42D0aNteogmCjfWpAn8+y8cP5719uz+iGfOOKQEjMqkzrQ67Don5cf61u/L7C6zNWEo15S2dHbbNps65unyWDe2aRM8+uiNt3/8sfycMkWGo156SUrAnDzp3PgKm62DtrJl4BbGtBrDF/98QfNZzflux3fsPLtT60gp19KjB7z6KjRoAFFRTntZPaMwydChMG1axvE778DLL8NXX904ub1rl13Lv6hcpKSmsHjPYt5b9x5/HvuTEc1G8N82/6WoV9G8H6yUs/TuLcsmDxzIdYJTh57c3NmzsHs3vPsudO4sPdhbt5Ye3Fu2ZL3vpk3S70I5V+ThSHov6E1MQgxda3WlcvHKvN7qdQKKBJgdmirsLl+GOnXgscfgrbdyvJsmigLo2DHpkni9FSugXTvnx6PAMAwW7lrIkr1LmBs1F4D1/dfTuFxjncdQ5jp8GOrWla55OXxAaKIooHr1gm+/vfH2xx6TVXG1azs/JiX2nNvD/636P37Y/QN1S9XlqYZPMbTpUHw8fcwOTRVWM2fKB8M//0C5cjf8WhNFAfXxx/DMM9n/rkkT2LgROnWSUiCvvebc2JQ4F3+Ob6K/YdgyqcXSoEwDRjQbQeeanQksohtilJPdc09GraDraKIooNL+mEWLQuJ1texatYLISNm0V68e7Nghy2dDQpwepgKOXjrKkYtHGLl6JGuPrqW0X2nGtx7P4+GPU8SriNnhqcJi504Zglq3LqO1qpUujy2gLBa5XLsmK6My+/13eOMNue7hkVFsUJmjUvFK3FP5Hv548g9SX0+ld93eDPxpIEXfLEr/xf05c+WM2SGqwqBOHZgwAR56CK5edchLaKJwYWll6N9/P+O2sWPl56VL8vP8eUhOlutXr0JSktPCU5lYLBbev+99zv7nLKdeOkViaiI1P6xJn4V9WLpvKalGqtkhqoLsmWfkW2Na/2U700ThwtL6bMfF3fi7M9Yvq61bw+uvy/XatbXAoNlCfEMo41+Ged3msfHpjZT1L0u3+d3w+a8PT/zwBFeTr+omPmV/xYtLz+3nn3dI32Wdo3BhSUnyJSEwUKoNV64Mt92W/X3j48HXF2rUgL17nRunyp1hGPy450d6LeiFt6c3lxMv8+jtj/L8nc/TpHwTs8NTBYVhyJj0hAnwyiuATmYXWi1byka9s2dlo96SJXL7339Dw4ZSjXjRIpkMr1DB3FhVVoZh8Nexv/ho80esOriK01dO81j9x2hZqSXtqrajSlAVs0NU7m70aJgxQ75henlpoijMoqOlQ+Ltt8vO7rZtZQJ85UpZQrtpk9QL27ZNqtUGBUnDJOU6DMNgxcEV7I/Zz+I9i/nt0G/UKFmDqR2n0rZqW7PDU+4qNlaGoX76CR54QBOFgqNHpbXu1q0wf/6Nv588GV58Ua6vWiXFBj/+GMqWdW6cKm+x12KZs20OE9ZOIMQ3hHZV2zG82XAqBOppobpJL78s3xJ//VUThcqQmgoffAAvvJDzfZ57Tua6liyBNm2cF5u6OQlJCUxeP5nd53Yz7595APSp14dHbn+EiLAI7fmt8rZ1KzRqBNeuYSlSBDRRqDRJSTKJ/eqrEBEhJcoBunaVJbRly0ppkOrVYdAgGDHC1HCVDXac2cG64+s4fPEwU9ZPwdvTm7sq3MWLd71IswrNtDihylmtWjB1KpYOHUAThcpOYqLMXbz2mkx8R0VJDak0Dz8M330n13fu1PpR7iA5NZnNJzfTe0Fvjlw6QoXACjQu15j32r9HhcAK2vtbZTV2LBw4gOWLL0AThcpJaqokiAYNYPlyuP/+7O/300+wdCn4+WkrVndgGAYGBvOj57Pi4Apmb5sNwJ3l72Rgo4H0qdeHYt7FTI5Sme6332DMGCx//AGaKJQtduyQ2lAgy2Zz2uU/fLjcr18/WUWlXJthGCSlJrHu2DoW7lrI+uPr2XJqCyG+IYT4hjCs6TA63dZJJ8QLo0OHoGrVtA94TRTKNj4+UhLkuedkP05OKlaUvhh//SVnJUWKyJ6NX36BDRuk7phyXVeTrzL8l+FEHo7kwIUDJKYk0q1WN5pVaEbf8L6E+oWmrYRRBZlhwJo1WCIiQBOFstWhQ5IoKlSQye3MFWfDw2UCPCgoo5ZUmgoV4Phx6YuycqUkD/2ccQ+x12KJPuR6FKYAAA/pSURBVBPNrrO7WH98PXOi5uDj6cPdFe+mY7WOVAuuRvtq7fH19jU7VOUgujxW5cvIkbLb/803YepUGCatFQgPlx4o1/P0hJQUmDtXeni/9ZacZTRvDv7WFZuxsVJKpEwZ5/05lO1SjVTirsUxf8d8Rv82mjNXzhDgE0D3Ot1pXLYxdUrVoWXlltq5rwDRRKHs4ocfoEMHKGad/0xOlgnwPXugb1+47z7o00eSxPWPe/hh2fBXsiRcvAjTpknbVsOQzYCxsRlzI8r1xCfFc/bKWWb9PYud53Zy8MJBLiRcIKBIAOGh4dQtVZc7K9xJi0ot8PLwMjtcdQs0USiHOX1aEkb58nJ85IgkhU2b5NjLS4axfHwyyp1nNnasXNIKFBoG/PkntGjhrD+BulWbTmxi0a5FxCfFE58Uz5K9S0hITqB1WGtqhdTivur30axiM7w9vHWuww1oolBOV748nDwJAwZIp72RI+HJJ3N/zKefSnmRFStg4EApIZKYKEkmOwkJMoHuoQXwXUb0mWj+PvU3fx77k8jDkew5v4ey/mWpH1qfiLAISvuVpmbJmlQPrk4pv1J4WPQvz1W4S6LoCEwBPIFPgYnZ3GcqcB8QD/QD/s7mPpooXMCKFdC+vZxZNGokw1G//w533y2b+559VmpKxcdD1arw4IM3PsfXX8tQ1qlTEBAgZyRly2ZMknt6wqRJslRXuaZrydc4EXeC9cfXs/boWk5dPsW+8/s4eOEgxYsWp3ZIbaoGVSU8NJw7K9xJ9eDqFC9SXOc+TOAOicIT2AO0A04Am4A+wK5M97kfGGr9eSfwPpC16avQRGEVGRlJhCx5c2lxcdJHo21bSR4A//2vVEG+npeXDHU1agRbtsiZSvPm0v53zRpJIC1ayC7zWrUkmfj7w9q12b8Xaf9UCtPIiKv8u9gfs58DMQdYf3w9a46u4fTl0+w4u4PAIoHUKVWHBqENKOlbksrFK3NbyduoXKIypf1KU8yrmN2GslzlvXAF9koUjpyhagrsBw5bj78BupA1UTwIfG69vgEoAYQCpx0Yl1tzl/8EAQEZH9h//w0XLkgxwqeegnPnZHUVSPmQXbtkuGnLFrntrbfyfv5u3aBYsUj274/gqaekMu4990jNq+bNpTvgmULUstpV/l1UD65O9eDqdKjeIf22+KR4Ll69yN7ze9l8cjOXEy+zbP8ypm2aRkxCDMdijwFQr3Q9yvqXpWxAWUr5lsLT4sk9le8hrEQYRTyLUDWoqk1nJa7yXhQkjkwU5YFjmY6PI2cNed2nApooCpSGDTOulysnl5QUWLtWEsbOndIfvkQJWUU1ZoysuHrttYx9HNf7/XeIiYGvvpI5k+udPStnFH36yFnNoEEyRNa7t2wqPH0a1q+XM5X4eLlt3z5pDHXxoiSZ4GDp72EYUuaka1d5ze++k+dq3FheKzkZLl+Ga9fkNX19ZSXY1avynDVr5jwnUxj4evvi6+1LuYByRIRF3PD7VCOVLSe3YLFY2H1uN+fiz7H3/F5Oxp1k+5nt7IvZR3xSPKfiTlHUqyhXk69SJagK1YKqEVQsiNK+pfH38adcQDm8PLzYfW43qw+tTn/dtIu/jz+JKYmUKFoCwzC0PtZNcGSisHWs6PrTIh1jKgQ8PORDGaBZM/l55AhUqpRRwHDUKPnAnz9fzhJq15YP9e3boWlTePxx+PJLqZjbowc88YT0EK9ZU44rV5YP7F9/lQ/19etlye6ZMzJHUrWqbERcvdq2mH195fVBPvgTE2+8T5EikjA8PGTeBeS1/f3lbMfTU167fHl57QoV5H5Xr0oCzTz6Eh8vk/slS2Z9DcOAEyfkOdLuv2ePnJElJEjSSktYCQmy9Nk3hz11MTESs5+fbe+BY3gAaS1hG2f5jSdQCzAwaGBJ5qr3cSyGF9e8T3PJ6yznvC4S7XWGZM9YrvpEY5DM+c1bWPnheFI84rNckj1j8TC8SfK8hAUPMDzwSvXHI7UYFjywGB6Q+addb7PnOKjzx1Qd+Yp3AWORCW2AV4FUsk5ozwAikWEpgN1AK248o9gPVHNQnEopVVAdAKqbHURuvJAgwwAfYBtwfUHr+4Gl1ut3AeudFZxSSinXcB+y8mk/ckYBMMh6SfOh9fdRwB1OjU4ppZRSSilVsHVE5i32Aa+YHIszVAR+A3YA0cBz1tuDgRXAXuBXZBlxmleR92c30N5pkTqPJ7IJc4n1uLC+FyWABcjy8p3ICsLC+l68ivwf2Q58BRSh8LwXs5A53O2ZbruVP3sj63PsQ/avuS1PZEgqDPAm+zmOgqYM0MB63R8ZtqsNvAO8bL39FSCto0Qd5H3xRt6n/cgSkoJkOPAl8KP1uLC+F58DT1mvewHFKZzvRRhwEEkOAPOBJyg878U9QEOyJoqb+bOnLWDaiOx1A5knTlt05HaaAcszHf+f9VKY/IDsbN+NbEQESSa7rddfJeuZ1nKy39nurioAK4HWZJxRFMb3ojjy4Xi9wvheBCNfoIKQhLkEuJfC9V6EkTVR3OyfvSxZNz73Rlag5siVM2t2m/HKmxSLGcKQbw4byLpb/TQZ/yjKIe9LmoL2Hk0G/oMsq05TGN+LKsBZYDawFfgE8KNwvhcxwKT/b+/cQ6yqojj83UYtSwsyI6XslqZBlJRGZUMzPSDIILBIexc9iMy0BxFGZRShFvZHUFBGYy/pTZH0wqwZnVTUcaaXUWHvQoueljqO0x+/tTv7njn3esemxrl3fTDMvvucu8/ea9+z9tprn7M28BXwHfALcrtUoywC3W17Ov9bdiCTXXmgqOYX7wYBLwDTgd9TxzopLZtKkduZwAa0PlHsfZ9qkUU/9ETgg/Z/E11n19Uii5HADGRIDUf3yoWpc6pFFlnsqO07xa48UHyLFncDB1E4ClYq/dEg8QRyPYGshLBv3DCkQKGrjA60vEpgAooFth5YCJyCZFKNsvjG/mxHEJ5HA8YPVJ8sxgPNwE/ANuBF5KauRlkEunNPfGP5B6by+6xMynlhr9LIAY8jl0vMXBJf4y10XawagNwTn9N39hjpDnUkaxTVKotGYLSlZyE5VKMsxqInAgeiNi0AplJdssjTdTG7u21fgZ6cy9HHF7Mh+4W9SqYW+ePXIpdLC+rAfdGibtbjbzORfNYBp1OZ1JE89VStshiLZhStyIreh+qVxc0kj8cuQLPwapHFQrQ2sxWt4V7GzrU9PB77GdoTyHEcx3Ecx3Ecx3Ecx3Ecx3Ecx3Ecx3Ecx3Ecx3Ecx3EcZ1elA71f8QF63+IGkpdoxlE6ZPDBwHn/ae2Kk6fwJaFyuAS9adrbzOztCpRBA3B2D5eZp3ifPYK2s4by5DMDvSRXjEeo/BdqHed/I479NBQFRJtV5nfrSd5w/r/J0/2BYgka/HqbdLytnqYnQuk8BkzqgXJi8pTXZ+XIZz0wpMixXTmUkOP0SdI35SHAj5auJxkI6kje7l6NgqctR9E2W1DAwYNRaIjV9ndCVM47wHMoHPGT0fWOBZah2cwKFMW0BrgXxbhvBa7KqHc+KusjKztYmOPseqtQKOQDgHOsreusvrUoBhbAWcCfKMzLHig0AShg3GtWTiMwxvKHovhIK+1vguXPQhvBLLEypmXUezaKKdRidb8pOu9+YLGlT4nkdB7QhpTsbLL5wo6tBiYDV1jd1lpdg2wa0CxxmdUxzBpyaBvhdchYWBQdOxVFmW0DHkUhHMI177G2rELxot5Eb+fG2xMH8hTvs3dQv8XyeQLY0+qy1tp/LpLXFqtPkNcfwH123olW3jHRsbvt2HvA/pY/Ev2G2+x4uBeGof5usWvWZrTFcaqKLOvtZ6QM60kGildIFP+eSJnHMZNAN33YAOYwkqBz9WhAGY4UUjNSrgOQsgpW/iAr9yrgVsvb3crJp+qYR+FJQp0eBW5Eyr6ZxNqcbMdACjwojxD7C6RgVlid6tDGRiAlNMrSx5EopaeRMgIYgZQeaKBYikJADEEDbg1diWV+HPCspZuQ4uoH3AFciWT2pZVXY3U4K6PM9WjQCewbpe8CrrV0A9qcB+Sa+dTSk5CSzyFF+bPl7YFCcAc5LEBGQbhmGBDmIYW7F7AfCqqXJk92n0Fh38TyORt4OPo8OLp23MbtyBgIxOVtByZaeg7Jb+tV9PvA2vGbpW8kcX/l0O/S6UF8yle5LEMW7zS0yUsHXYOhDQDmI4XxLIU+4pUopkwnsuwOQRb698gKBll+HWiLxYuRRbccKYRRdOVrZCGCrNRaK/MIFKumBSmFODZ+qPM2NFAcjmY184CTrIwmpPAmIKu3BW3EEiJqnoas7xbgZaS89rK2LQLaUTTSDSSx/IuxBg2Ug4HN1p7xUT2ORdbxTyabp6yeWTwTpY+077cBF6CAblgdQxThj6P6nYQGwE7UJ29b/hiklD+zzwtS1w8xs963um9CA+QWYO+MOmb1WSna0EZCs+3cYm6pDpIZYpqtqF9Av7W8pY9H/QuKeRTv1nYZGqyPQr9Lpwfp19sVcP41h6KbbmMqfw6ywCaiQSMrGNr1SMlchKzfzdGxLVG6A/1WSsW5vxa5QEoRfz9nn3MowNuEzG8UfqcROAMp9sVICe6GLPMaZFUfnVFGDs0EtmYci/NCO0vRjhTxpWgm1IbcTqOQG2h06vxSkUo3RekGFFb9fbSIX1+kjqG8TrLLTvdRLpUX+nV7qtztZLc9q89K8Snqg4nIPbQYzZDSbC5RVnsZ9YppQluEnonkOA+5wZwewmcUfZuhyHJ+IOPYSKSA5yJX0Bg0VR8cnbM3icvhYrLdLoFOFMl3GLKgsbJqgDeAa0hu6NHI3ZVmBMk2lOejG/wTa0fI709iTf9OoZXbhJ6eaUZW8BC71ofWtvUk7owcsi5BLprronLGlmhnFu0UKqsmNDi9a+mr0UwDJOs6EtfTFDTD2BGDUF/0Rxvx7EghNyI3zG6oT062/E+QBT7SPl9k9UxTbqjtrD5LE8tnGBoEnkIuwjBwp/tyZ1hO0r9TUnXciGbH88k2Fpx/gQ8UfY+BJI/HvoUWf++0Y/HuVtORddqKLMfXkPXbgVxJ09GOaZfY5zEUTtmzFFU7Uk4P2HfeQGsS85Hff41d8yG6WoFhoJlq5+5j57Wjm38OSXj14BNvQAPhGrvOSrSw2WjHWyl8KucC4HIr5wNkoYMGifF2/ocULtyWsxvYw0h2wUpditxa7yF31V8kCvR7tCfAEqvHKrKfNEtf9za07rKUwv2M0+eG9EvIev8IzayaLX8LcsM8Z3XeRrIfcrqcrHLT183qszSxfI60drQAt6NZRTjndZJ1o3J3oIvrOQM9Dr4WDYS/Wv7JlrcGLZ6XekTccRzHqWDi9zCmoMHScRzHcf6hFs0cWpE779BerY3jOI7jOI7jOI7jOI7jOI7jOI7jOI7jOI7jOI7jOI7jOH2RvwGkSp+q5SEecgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1117f7790>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.hold(True)\n",
    "for d, points in v:\n",
    "    x, y = points\n",
    "    ymax = max(y)\n",
    "    y = [float(a)/ymax for a in y]\n",
    "    plt.plot(x, y, label='Radius: {}'.format(d))\n",
    "plt.xlabel('Distance between two random bitstrings')\n",
    "plt.ylabel('Intersection of their circles')\n",
    "plt.legend()\n",
    "plt.hold(False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
